export class TCesium {

    viewer = null;
    scene = null;

    /**
     * 构造器函数：实例化cesium
     * @param {*} dom 节点id
     */
    constructor(dom) {
        this.pointInfo = [
            {
                id: "392f7fbb-ae25-4eef-ac43-58fd91148d1f",
                latitude: "31.87532",
                longitude: "120.55538",
                psName: "点位1",
                type: "dt"
            },
            {
                id: "0278a88c-b4f4-4d64-9ccb-65831b3fb19d",
                latitude: "31.991057",
                longitude: "120.700713",
                psName: "点位2",
                type: "dt"
            },
            {
                id: "248f6853-2ced-4aa6-b679-ea6422a5f3ac",
                latitude: "31.94181",
                longitude: "120.51517",
                psName: "点位3",
                type: "dt"
            },
            {
                id: "F8DADA95-A438-49E1-B263-63AE3BD7DAC4",
                latitude: "31.97416",
                longitude: "120.56132",
                psName: "点位4",
                type: "laligan"
            },
            {
                id: "9402a911-78c5-466a-9162-d5b04d0e48f0",
                latitude: "31.91604",
                longitude: "120.57771",
                psName: "点位5",
                type: "laligan"
            },
            {
                id: "EB392DD3-6998-437F-8DCB-F805AD4DB340",
                latitude: "31.88727",
                longitude: "120.48887",
                psName: "点位6",
                type: "laligan"
            },
        ];
        Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhNzZkNGJmMi05MjlmLTQwODEtYWEwNi1iMGQ4ZDhmNmQ1ZjgiLCJpZCI6MTY3ODkzLCJpYXQiOjE2OTUzNTM4NzF9.IB-oMOYLgq_iPcXdiFpL6m4SU-5fGO8CdnYpZtSGRA4';
        // this.viewer = new Cesium.Viewer(dom, {
        //     homeButton: true,//主页
        //     sceneModePicker: true,//维度控制
        //     baseLayerPicker: false, // 影像切换
        //     animation: false, // 是否显示动画控件
        //     infoBox: false, // 是否显示点击要素之后显示的信息
        //     selectionIndicator: false, // 要素选中框
        //     geocoder: false, // 是否显示地名查找控件
        //     timeline: false, // 是否显示时间线控件
        //     fullscreenButton: false,
        //     shouldAnimate: false,
        //     navigationHelpButton: false, // 是否显示帮助信息控件，
        //     terrainProvider:terrain
        // });
        this.viewer = new Cesium.Viewer(dom, {
            baseLayerPicker: true, // 如果设置为false，将不会创建右上角图层按钮。
            geocoder: true, // 如果设置为false，将不会创建右上角查询(放大镜)按钮。
            navigationHelpButton: true, // 如果设置为false，则不会创建右上角帮助(问号)按钮。
            homeButton: true, // 如果设置为false，将不会创建右上角主页(房子)按钮。
            // sceneModePicker: true, // 如果设置为false，将不会创建右上角投影方式控件(显示二三维切换按钮)。
            animation: true, // 如果设置为false，将不会创建左下角动画小部件。
            timeline: true, // 如果设置为false，则不会创建正下方时间轴小部件。
            fullscreenButton: true, // 如果设置为false，将不会创建右下角全屏按钮。
            scene3DOnly: true, // 为 true 时，每个几何实例将仅以3D渲染以节省GPU内存。
            shouldAnimate: true, // 默认true ，否则为 false 。此选项优先于设置 Viewer＃clockViewModel 。
            // ps. Viewer＃clockViewModel 是用于控制当前时间的时钟视图模型。我们这里用不到时钟，就把shouldAnimate设为false
            infoBox: false, // 是否显示点击要素之后显示的信息，原生自带右上角弹窗
            sceneMode: 3, // 初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneMode
            requestRenderMode: false, // 启用请求渲染模式，不需要渲染，节约资源吧
            selectionIndicator: false, // Cesium 关闭点击绿色框
            // fullscreenElement: document.body, // 全屏时渲染的HTML元素 暂时没发现用处，虽然我关闭了全屏按钮，但是键盘按F11 浏览器也还是会进入全屏
            // imageryProvider: layer0, //影像地图修改
            // imageryProviderViewModels: [img_tdt_yx, img_tdt_dx, img_tdt_sl], //可供BaseLayerPicker选择的图像图层ProviderViewModel数组
            terrainProvider: Cesium.createWorldTerrain(), //提供地形
        });
        this.scene = this.viewer.scene
        this.viewer._cesiumWidget._creditContainer.style.display = 'none'//去除水印


        // this.viewer.camera.flyTo({
        //     destination: Cesium.Cartesian3.fromDegrees(104.06932, 30.65999, 20000),//定位的位置
        //     orientation: {
        //         heading: Cesium.Math.toRadians(0),// 水平偏角，默认正北 0
        //         pitch: Cesium.Math.toRadians(-90),// 俯视角，-90，垂直向下
        //         roll: Cesium.Math.toRadians(0)
        //     },
        //     complete: function callback() {
        //         // 定位完成之后的回调函数
        //         setTimeout(() => {
        //             getview()
        //         }, 2000)
        //     }
        // });

        // var position = Cesium.Cartesian3.fromDegrees(86.889, 27.991, 84000);
        // //相机定位到珠穆朗玛峰
        // this.viewer.camera.setView({
        //     destination: position,
        //     orientation: {
        //         heading: Cesium.Math.toRadians(0.0), //正北
        //         pitch: Cesium.Math.toDegrees(-10), //平视
        //         roll: 0.0
        //     }
        // });
        this.addMarker()
        this.addmodel()
        const boundingSphere = new Cesium.BoundingSphere(
            Cesium.Cartesian3.fromDegrees(120.55538, 31.87532, 100),
            15000
        );
        // 定位到初始位置 将相机移到当前视图包含所提供的包围球的位置
        this.viewer.camera.flyToBoundingSphere(boundingSphere, {
            // 动画，定位到初始位置的过渡时间，设置成0，就没有动画
            duration: 0,
        });
    }
    addMarker() {
        // 自定义label颜色
        const _textColor = "rgb(11, 255, 244)";
        // 清除上一次加载的点位
        this.clearMarker();
        // foreach循环加载点位
        this.pointInfo.forEach((pointObj) => {
            console.log(139, pointObj);
            this.viewer.entities.add({
                name: pointObj.psName,
                code: pointObj.id,
                id: pointObj.id,
                position: Cesium.Cartesian3.fromDegrees(
                    pointObj.longitude * 1,
                    pointObj.latitude * 1
                ),
                // // 点
                // point: {
                //     pixelSize: 5,
                //     color: Cesium.Color.RED,
                //     outlineColor: Cesium.Color.WHITE,
                //     outlineWidth: 1,
                //     heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, //设置HeightReference高度参考类型为CLAMP_TO_GROUND贴地类型
                // },
                // 文字标签
                label: {
                    // show: false,
                    text: pointObj.psName,
                    font: "12px monospace",
                    style: Cesium.LabelStyle.FILL_AND_OUTLINE,
                    // fillColor: Cesium.Color.LIME,
                    fillColor: Cesium.Color.fromCssColorString(_textColor),
                    outlineWidth: 4,
                    verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 垂直方向以底部来计算标签的位置
                    pixelOffset: new Cesium.Cartesian2(0, -40), // 偏移量
                    heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, //设置HeightReference高度参考类型为CLAMP_TO_GROUND贴地类型
                },
                // 图标
                billboard: {
                    image: pointObj.type == 'dt' ? require("../../assets/all-dt.png") : require("../../assets/吊杆力仪.png"),
                    width: 48,
                    height: 48,
                    pixelOffset: new Cesium.Cartesian2(0, -20), // 偏移量
                    heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, //设置HeightReference高度参考类型为CLAMP_TO_GROUND贴地类型
                },
            });
        });
    }
    clearMarker() {
        this.viewer.scene.primitives.removeAll();
    }
    addmodel() {
        const position = Cesium.Cartesian3.fromDegrees(
            -123.0744619,
            44.0503706,
            10.0
        );
        const heading = Cesium.Math.toRadians(135);
        const pitch = 0;
        const roll = 0;
        const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
        const orientation = Cesium.Transforms.headingPitchRollQuaternion(
            position,
            hpr
        );
        const entity = this.viewer.entities.add({
            name: "Cesium_Air",
            position: position,
            orientation: orientation,
            model: {
                uri: "./modle/car.glb",
                minimumPixelSize: 128,
                maximumScale: 100,
            },
        });
        this.viewer.trackedEntity = entity;

     


    }
}